home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
tex
/
texttest.zip
/
DICT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-21
|
3KB
|
129 lines
/***********************************************************************/
/* Power-Pipe: This is a Pipe-Filter similar like SORT / FIND / MORE */
/***********************************************************************/
/*type info.doc|dict >info.dct ;Sort A...Z and kill worddublettes*/
/*type info.doc|dict /R >info.dct ;Sort Z...A and kill worddublettes*/
/*type info.doc|dict ! ! >info.txt ;Extract raw Text for WindowsWrite*/
/* DICT is very usefull if you want extract Dictionarys from Textfiles */
#include <string.h>
#include <stdio.h>
#include <alloc.h>
char Puffer[80];
char April[80];
char Ktipa[80];
int ASCIItable[256];
char huge *Zeiger;
char huge *Zeiger2;
char huge *ZeigerK;
char huge *ZeigerS;
unsigned long Frei;
unsigned long gross,z,y;
int a,b,t,i,l;
int stp;
int isnotletter(int c)
{
if((c>='a')&&(c<='z')) return 0;
if((c>='A')&&(c<='Z')) return 0;
if(c==39) return 0;
if(c=='ß')return 0;
if((c>=128)&&(c<=165)) return 0;
return 1;
}
int main(int argc)
{
Frei=farcoreleft()-5000;
Zeiger2= (char huge *) farmalloc(Frei);
Zeiger=Zeiger2;
Frei=Frei-2;
for(t=0;t<256;t++)ASCIItable[t]=t;
ASCIItable['A']=1;
ASCIItable['a']=1;
ASCIItable['Ä']=2;
ASCIItable['ä']=2;
ASCIItable['Ö']=17;
ASCIItable['ö']=17;
ASCIItable['Ü']=24;
ASCIItable['ü']=24;
ASCIItable['ß']=30;
for(t='B';t<='O';t++)ASCIItable[t]=t-63;
for(t='P';t<='U';t++)ASCIItable[t]=t-62;
for(t='V';t<='Z';t++)ASCIItable[t]=t-61;
for(t='b';t<='o';t++)ASCIItable[t]=t-95;
for(t='p';t<='u';t++)ASCIItable[t]=t-94;
for(t='v';t<='z';t++)ASCIItable[t]=t-93;
l=2*argc-3;
if(l>1)l=-1;
a=0;
for(gross=0;gross<Frei;gross++)
{
stp=fgetc(stdin);
if(stp<0) break;
i=isnotletter(stp);
if(!i)a=0;
if(i&a) {a=0; while(isnotletter(stp)){stp=fgetc(stdin); if(stp<0)break;} }
if(stp<0) break;
if(isnotletter(stp)) stp=0,a=1;
*(Zeiger)=(char)stp;
Zeiger=Zeiger+1;
}
if(gross==Frei)return 1;
*(Zeiger)=0;
gross++;
Ktipa[1]=1;
Ktipa[0]=0;
April[0]=0;
loop:
Zeiger=Zeiger2;
ZeigerS=Zeiger;
ZeigerK=Zeiger;
a=0,y=0,i=0;
if(l<0)i=255;
for(t=0;t<79;t++)April[t]=i;
April[79]=0;
for(z=0;z<gross;z++)
{
b=*(Zeiger);
Zeiger=Zeiger+1;
if((a|b)==0)continue;
Puffer[a]=b;
a++;
if(a>77) {t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++; continue;}
if(a==1) ZeigerS=Zeiger-1;
if(b==0)
{
for(i=0;i<a;i++) if(ASCIItable[Puffer[i]]!=ASCIItable[Ktipa[i]])break;
if(i==a){t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++; continue;}
for(i=0;i<a;i++)if((t=ASCIItable[Puffer[i]]-ASCIItable[April[i]])!=0)break;
if(t*l>0) { y++; ZeigerK=ZeigerS; strcpy(April,Puffer); }
if (argc>2) break;
a=0;
}
}
if(y>0)
{
t=0;
while(*(ZeigerK+t)!=0)*(ZeigerK+t)=0,t++;
t=fputs(April,stdout); if(t<0) return 2;
if(argc>2) t=fputs(" ",stdout);
if(argc<=2) { strcpy(Ktipa,April); t=fputs("\n",stdout); }
if(t<0) return 2;
}
if(y>0) goto loop;
farfree(Zeiger2);
return 0;
}